.

iT邦幫忙

1

Unity2D橫向捲軸手機遊戲:可穿越的移動平台

  • 分享至 

  • xImage
  •  

建立空物件AirPlatform並把地板的圖檔當作子物件(這樣子物件圖檔的座標會是以父物件的中心點的相對座標)
在連接不同的圖檔做成一個平台時,可以按住V鍵可以完美貼合圖檔(不會有縫隙

接著在父物件AirPlatform加入Boxcollider,Size調整為3(子物件為三張各自佔了一格的圖檔,因此3可以完整包覆),再加入Platform effector 2D,且在Boxcollider勾選use by effector,並把collider縮到盡量最上層最小,以免影響動畫的改變

加入移動的腳本

using UnityEngine;

public class AirPlatform : MonoBehaviour
{
    public Vector3 turnPoint;//設置在unity可變動的平台目標座標
    Vector3 targetPosition,originPosition;
    public float moveSpeed;
    // Start is called once before the first execution of Update after the MonoBehaviour is created
    void Awake()
    {
        originPosition=transform.position;//紀錄原始位置
    }

    // Update is called once per frame
    void Update()
    {
        if(transform.position==originPosition)//當座標在起點
        {
            targetPosition=turnPoint;//目標座標就是turnPoint
        }
        else if(transform.position==targetPosition)//當座標在targetPosition
        {
            targetPosition=originPosition;//targetPosition變成原始位置
        }
        transform.position= Vector3.MoveTowards(transform.position,targetPosition,moveSpeed*Time.deltaTime);
    }
}

接著解決Player不會跟著移動平台移動的問題
先在AirPlatform TagAirPlatform標籤,進入PlayerButtomCollider腳本

public class PlayerButtonCollider : MonoBehaviour
{
    Player playerScript;
    // Start is called once before the first execution of Update after the MonoBehaviour is created
    void Awake()
    {
        playerScript=GetComponentInParent<Player>();
    }
    void OnTriggerEnter2D(Collider2D collision)
    {
        if(collision.gameObject.CompareTag("Ground"))
        {
            playerScript.canJump=true;
            playerScript.Anim.SetBool("jump",false);
        }
        if(collision.gameObject.CompareTag("AirPlatform"))
        {
            playerScript.canJump=true;
            playerScript.Anim.SetBool("jump",false);
            playerScript.transform.parent=collision.transform;
            //把AirPlatform當成Player的父物件
        }
    }
    void OnTriggerExit2D(Collider2D collision)
    {
        if(collision.gameObject.CompareTag("AirPlatform"))
        {
            playerScript.transform.parent=null;
            //當離開AirPlatform之後Player就去除Player的父物件
        }
    }
}

.

尚未有邦友留言

立即登入留言